# include <stdio.h>

int main(void)
{
    int * p; //p是变量的名字, int * 表示p变量存放的是int类型变量的地址
    /*
     int * p; 不表示定义了一个名字叫做*p的变量
     int * p; 应该这样理解: p是变量名, p变量的数据类型是 int *类型
     所谓int * 类型 实际就是存放int变量地址的类型
     */

    int i = 3;
    int j;

    /*
    1. p保存了i的地址, 因此p指向i
    2. p不是i，i也不是p，更准确的说： 修改p的值不影响i的值，修改i的值也不会影响p的值.
    3. 如果一个指针变量指向了某个普通变量, 则*指针变量就完全等同于普通变量
    例子:
      如果p是个指针变量，并且p存放了普通变量i的地址,则p指向了普通变量i。
      *p 就完全等同于i，或者说:在所有出现*p的地方都可以替换成i。
       在所有出现i的地方都可以替换成*p，*p 就是以p的内容为地址的变量。
    */
    p = &i;

    j = *p;  //等价于 j = i;

    printf("i = %d, j = %d\n", i, j);


    int a = 100; // 定义变量
    int *pa = &a;
    printf("*pa = %d\n", *pa);

    *pa = 200;
    printf("*pa = %d\n", *pa);
    return 0;
}